package control;


import java.io.IOException;
import java.util.ArrayList;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import VO.ClienteListaVO;

import com.itextpdf.text.DocumentException;

import pdf.ClientePDF;

import service.ClienteService;
import utils.Constantes;
import utils.Utils;

import model.Cliente;

public class ClienteControl extends GenericControl implements IControl {

	private static final long serialVersionUID = 1L;

	public void executar(HttpServletRequest request,
			HttpServletResponse response) {
		this.setRequest(request);
		this.setResponse(response);
		String method = request.getParameter("acao");
		if (method.equals("adicionar")) {
			this.adicionar();
		} else if (method.equals("openadicionar")) {
			this.openAdicionar();
		} else if (method.equals("openpesquisar")) {
			this.openPesquisar();
		} else if (method.equals("pesquisar")) {
			this.pesquisar();
		} else if (method.equals("pesquisarmes")) {
			this.pesquisarmes();
		} else if (method.equals("buscarum")) {
			this.buscarum();
		} else if (method.equals("alterar")) {
			this.alterar();
		} else if (method.equals("excluir")) {
			this.excluir();
		} else if (method.equals("openAlterar")) {
			this.openAlterar();
		} else if (method.equals("gerarpdf")) {
			this.gerarpdf();
		} else if (method.equals("openpesquisarlixo")) {
			this.openpesquisarlixo();
		} else if (method.equals("pesquisarlixo")) {
			this.pesquisarlixo();
		} else if (method.equals("buscarumlixo")) {
			this.buscarumlixo();
		} else if (method.equals("restaurarlixo")) {
			this.restaurarlixo();
		}
		Dispatcher.showScreen(this.getRequest(), this.getResponse());
	}

	

	private void pesquisarmes() {
		

		Cliente clienteBusca=this.loadActionToModel();
			
//		int paginaAtual=1;
//		int count=0;
//		
//		if (!Utils.isBlank(this.getRequest().getParameter("paginaAtual")))
//			paginaAtual=Integer.valueOf(this.getRequest().getParameter("paginaAtual"));			
		
		
		ClienteService servico = new ClienteService();
		ArrayList<Cliente> clientes = servico.select(clienteBusca.getAniversario(), this.getPaginacao().getPaginaAtual());
		this.getPaginacao().setCount(servico.getCount());
		
		this.setAtributoRequest(Constantes.CLIENTES, clientes);
		this.setAtributoRequest("paginaAtual", this.getPaginacao().getPaginaAtual());
		
		this.setAtributoRequest("count", this.getPaginacao().getCount());
		this.setAtributoRequest("clienteBusca", clienteBusca);
		
		this.setAtributoRequest("acao", "pesquisarmes");
		//Dispatcher.showScreen(request, response);
		
	}



	private void openpesquisarlixo() {
		// TODO Auto-generated method stub
		//Dispatcher.showScreen(request, response);
	}



	private void openPesquisar() {
		
		ArrayList<Cliente> clientes = null;
			
//		int paginaAtual=1;
//		int count=0;
		
		ClienteService servico = new ClienteService();
		clientes = servico.select(new Cliente(), this.getPaginacao().getPaginaAtual());
		this.getPaginacao().setCount(servico.getCount());
		
		ArrayList<ClienteListaVO> clienteListaVOs = ClienteListaVO.toVO(clientes);
		
		this.setAtributoRequest(Constantes.CLIENTES, clienteListaVOs);
		this.setAtributoRequest("paginaAtual", this.getPaginacao().getPaginaAtual());
		
		this.setAtributoRequest("count", this.getPaginacao().getCount());
		
		//Dispatcher.showScreen(request, response);
	}



	private void openAdicionar() {
		// TODO Auto-generated method stub
		//Dispatcher.showScreen(request, response);
	}



	private void restaurarlixo() {
		Cliente clienteBusca=this.loadActionToModel();
		
		ClienteService servico = new ClienteService();
		servico.restore(clienteBusca);

		//Dispatcher.showScreen(request, response);
		
	}



	private void gerarpdf() {
		ArrayList<Cliente> clientes = null;
		Cliente clienteBusca=this.loadActionToModel();
		ClienteService servico = new ClienteService();
		clientes = servico.select(clienteBusca, 0);
		 String path = "http://" +  this.getRequest().getLocalName() + ":" +
   		 this.getRequest().getLocalPort() +
   		this.getRequest().getContextPath();

		try {
			ClientePDF.gerarPDFCliente(clientes, path, this.getResponse().getOutputStream());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		this.setRequest(null);
		
		
		
	}



	private void buscarumlixo() {
		Cliente clienteBusca=this.loadActionToModel();
		clienteBusca.setAtivo("N");
		
		ClienteService servico = new ClienteService();
		clienteBusca = servico.select(clienteBusca);

		this.setAtributoRequest(Constantes.CLIENTE, clienteBusca);
		//Dispatcher.showScreen(request, response);
	}



	private void pesquisarlixo() {
		ArrayList<Cliente> clientes = null;
		Cliente clienteBusca=this.loadActionToModel();
		clienteBusca.setAtivo("N");
		
		
//		int paginaAtual=1;
//		int count=0;
//		if (!Utils.isBlank(request.getParameter("paginaAtual")))
//			paginaAtual=Integer.valueOf(request.getParameter("paginaAtual"));
		
		
		
		ClienteService servico = new ClienteService();
		clientes = servico.select(clienteBusca, this.getPaginacao().getPaginaAtual());
		this.getPaginacao().setCount(servico.getCount());
			

		this.setAtributoRequest(Constantes.CLIENTES, clientes);
		this.setAtributoRequest("clienteBusca", clienteBusca);
		
		this.setAtributoRequest("paginaAtual", this.getPaginacao().getPaginaAtual());
		this.setAtributoRequest("count", this.getPaginacao().getCount());
		
		//Dispatcher.showScreen(request, response);
		
	}



	private void openAlterar() {
		Cliente clienteBusca=this.loadActionToModel();
		
		ClienteService servico = new ClienteService();
		clienteBusca = servico.select(clienteBusca);
		
		this.setAtributoRequest(Constantes.CLIENTE, clienteBusca);
		//Dispatcher.showScreen(request, response);
		
	}

	private void excluir() {
		Cliente cliente=this.loadActionToModel();
		
		ClienteService servico = new ClienteService();
		servico.delete(cliente, this.getLogado());
		
		this.setAtributoRequest(Constantes.MENSAGEM, servico.getResultado());
		this.openPesquisar();

	}

	private void alterar() {
		Cliente cliente = this.loadActionToModel();

		ClienteService servico = new ClienteService();
		cliente = servico.update(cliente, this.getLogado());
		
		this.setAtributoRequest(Constantes.MENSAGEM, servico.getResultado());
		this.setAtributoRequest(Constantes.CLIENTE,cliente);

		//Dispatcher.showScreen(request, response);
	}

	private void buscarum() {
		Cliente clienteBusca=this.loadActionToModel();
		Cliente cliente = null;
		
		ClienteService servico = new ClienteService();
		cliente = servico.select(clienteBusca);
		this.setAtributoRequest(Constantes.CLIENTE, cliente);
		//Dispatcher.showScreen(request, response);

	}

	private void pesquisar() {
		Cliente clienteBusca=this.loadActionToModel();
		ArrayList<Cliente> clientes = null;
			
//		int paginaAtual=1;
//		int count=0;
//		
//		if (!Utils.isBlank(request.getParameter("paginaAtual")))
//			paginaAtual=Integer.valueOf(request.getParameter("paginaAtual"));			
		
		
		ClienteService servico = new ClienteService();
		clientes = servico.select(clienteBusca, this.getPaginacao().getPaginaAtual());
		this.getPaginacao().setCount(servico.getCount());
		
		this.setAtributoRequest(Constantes.CLIENTES, clientes);
		this.setAtributoRequest("paginaAtual", this.getPaginacao().getPaginaAtual());
		
		this.setAtributoRequest("count", this.getPaginacao().getCount());
		this.setAtributoRequest("clienteBusca", clienteBusca);
		
		//Dispatcher.showScreen(request, response);

	}

	private void adicionar() {
		Cliente cliente = this.loadActionToModel();

		ClienteService servico = new ClienteService();
		servico.insert(cliente, this.getLogado());
		this.setAtributoRequest(Constantes.MENSAGEM, servico.getResultado());

		//Dispatcher.showScreen(request, response);

	}
	private Cliente loadActionToModel() {
		HttpServletRequest request = this.getRequest();
		Cliente cliente = new Cliente();
		
		
		if (!Utils.isBlank(request.getParameter(Constantes.IDCLIENTE)))
			cliente.setId(Integer.valueOf(request.getParameter(Constantes.IDCLIENTE)));
		
		if (!Utils.isBlank(request.getParameter(Constantes.NOME)))
			cliente.setNome(request.getParameter(Constantes.NOME));
		
		if (!Utils.isBlank(request.getParameter(Constantes.EMAIL)))
			cliente.setEmail(request.getParameter(Constantes.EMAIL));
		
		
		if (!Utils.isBlank(request.getParameter(Constantes.ANIVERSARIO)))
			cliente.setAniversario(request.getParameter(Constantes.ANIVERSARIO));		
		
		if (!Utils.isBlank(request.getParameter(Constantes.FREQUENCIA)))
			cliente.setFrequencia(request.getParameter(Constantes.FREQUENCIA));
		
		if (!Utils.isBlank(request.getParameter(Constantes.TELEFONE1)))		
			cliente.setTelefone1(request.getParameter(Constantes.TELEFONE1));
		
		if (!Utils.isBlank(request.getParameter(Constantes.TELEFONE2)))
			cliente.setTelefone2(request.getParameter(Constantes.TELEFONE2));
		
		if (!Utils.isBlank(request.getParameter(Constantes.TELEFONE3)))
			cliente.setTelefone3(request.getParameter(Constantes.TELEFONE3));
		
		if (!Utils.isBlank(request.getParameter(Constantes.ATIVO)))
			cliente.setAtivo(request.getParameter(Constantes.ATIVO));

		return cliente;
		
	}

}
